package com.zdxlz.fcmp.business.dto.mqtt;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;

import java.io.Serializable;
import java.util.List;

/**
 * @author: aman
 * @date 2025/2/11 19:54
 * @description IPSecConfig MQTT 数据配置类
 */

@Data
public class IpsecConfig implements Serializable {

    /**
     * IPSec连接序列号
     */
    @JsonProperty("Index")
    private int index;

    /**
     * 连接是否启用，1：使能 0：去使能
     */
    @JsonProperty("Enable")
    private int enable;

    /**
     * DPD重传间隔，单位秒
     */
    @JsonProperty("DPDRetry")
    private int dpdRetry;

    /**
     * IPSec类型，1: Site-to-Site 2: PC-to-Site
     */
    @JsonProperty("IPSecType")
    private int ipSecType;

    /**
     * 入IPSec隧道报文的源IP匹配条件，格式为：IP地址/子网掩码长度
     */
    @JsonProperty("LocalSubNetList")
    private List<String> localSubNetList;

    /**
     * 封装模式，1: 隧道模式； 2：传输模式
     */
    @JsonProperty("EncapsulationMode")
    private int encapsulationMode;

    /**
     * 入IPSec隧道报文的目的IP匹配条件，格式为：IP地址/子网掩码长度
     */
    @JsonProperty("RemoteSubNetList")
    private List<String> remoteSubNetList;

    /**
     * WAN连接的名称，命名方式：序号_关键字_桥接或路由方式_VID值"1_INTERNET_R _1280"
     */
    @JsonProperty("WANInterface")
    private String wanInterface;

    /**
     * 对端IP地址
     */
    @JsonProperty("RemoteIP")
    private String remoteIP;

    /**
     * IKE验证方法，PreShareKey
     */
    @JsonProperty("IKEAuthenticationMethod")
    private String ikeAuthenticationMethod;

    /**
     * IKE验证算法（MD5/SHA1/SHA256），默认SHA1
     */
    @JsonProperty("IKEAuthenticationAlgorithm")
    private String ikeAuthenticationAlgorithm;

    /**
     * IKE加密算法（DES\3DES\AES128\AES192\AES256）
     */
    @JsonProperty("IKEEncryptionAlgorithm")
    private String ikeEncryptionAlgorithm;

    /**
     * IKE组参数（none/group1/ group2/ group5/ group14）
     */
    @JsonProperty("IKEDHGroup")
    private String ikeDHGroup;

    /**
     * IKE身份类型
     */
    @JsonProperty("IKEIDType")
    private String ikeIDType;

    /**
     * 密钥
     */
    @JsonProperty("IKEPreshareKey")
    private String ikePreshareKey;

    /**
     * IPSec安全协议，AH/ESP
     */
    @JsonProperty("IPSecTransform")
    private String ipSecTransform;

    /**
     * IPSec认证算法（MD5/SHA1/SHA256）
     */
    @JsonProperty("ESPEncryptionAlgorithm")
    private String espEncryptionAlgorithm;

    /**
     * IPSec加密算法（3DES /AES128 /AES192/ AES256）
     */
    @JsonProperty("ESPAuthenticationAlgorithm")
    private String espAuthenticationAlgorithm;

    /**
     * IPSec DH组（none/group1/ group2/ group5/ group14/group19/group20/group21）
     */
    @JsonProperty("IPSecPFS")
    private String ipSecPFS;

    /**
     * IKE SA时间生命周期
     */
    @JsonProperty("IKESAPeriod")
    private String ikeSAPeriod;

    /**
     * 设置IPSec SA生命周期，单位秒
     */
    @JsonProperty("IPSecSATimePeriod")
    private int ipSecSATimePeriod;

    /**
     * 设置IPSec SA流量生命周期，单位秒
     */
    @JsonProperty("IPSecSATrafficPeriod")
    private int ipSecSATrafficPeriod;

    /**
     * AH认证算法（MD5/SHA1/SHA256）
     */
    @JsonProperty("AHAuthenticationAlgorithm")
    private String ahAuthenticationAlgorithm;

    /**
     * 使能DPD，1：使能 0：去使能
     */
    @JsonProperty("DPDEnable")
    private int dpdEnable;

    /**
     * DPD空闲时间，单位秒
     */
    @JsonProperty("DPDThreshold")
    private int dpdThreshold;

    /**
     * 对端IKE名称
     */
    @JsonProperty("IKERemoteName")
    private String ikeRemoteName;

    /**
     * 本地IKE名称
     */
    @JsonProperty("IKElocalName")
    private String ikeLocalName;
}
